package com.smart.mac.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.smart.mac.common.R;
import com.smart.mac.model.vo.FlowProcDefVO;

import java.io.InputStream;
import java.util.Map;

/**
 * FlowDefinitionService
 *
 * @Author mac
 */
public interface FlowDefinitionService {
    /**
    * 导入流程文件
    * 导入文件，直接部署，部署版本为1
    * @param: [name, category, in]
    * @return: void
    * @author mac
    */
    void importFile(String name, String category, InputStream in);

    /**
    * 读取图片
    * @param: [deployId]
    * @return: java.io.InputStream
    * @author mac
    */
    InputStream readImage(String deployId);

    /**
    * 发起流程
    * @param: [procDefId, variables]
    * @return: com.elephant.demo.common.R
    * @author mac
    */
    R startProcessInstanceById(String procDefId, Map<String, Object> variables);

    /**
    * 激活或挂起流程定义
    * @param: [state, deployId]
    * @return: void
    * @author mac
    */
    void updateState(Integer state, String deployId);

    /**
    * 删除流程
    * @param: [deployId]
    * @return: void
    * @author mac
    */
    void delete(String deployId);

    /**
    * 流程定义列表
    * @param: [name, pageNum, pageSize]
    * @return: com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.elephant.demo.model.vo.FlowProcDefVO>
    * @author mac
    */
    Page<FlowProcDefVO> page(String name, Integer pageNum, Integer pageSize);

    /**
     * 由流程key以及业务key开启流程
     * @param: [procDefKey 流程key, businessKey 业务key, variables]
     * @return: com.elephant.demo.common.R
     * @author mac
     */
    R startProcessInstanceByKey(String procDefKey, String businessKey, Map<String, Object> variables);
}
